import java.util.Arrays;

public class Solution36 {
    int[][] dir=new int[][]{{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2}};

    public boolean isValidSudoku(char[][] board) {
        boolean[] b=new boolean[10];
        for (int i=0;i<9;i++) {
            Arrays.fill(b, true);
            for (int j=0;j<9;j++){
                if (board[i][j]!='.'){
                    if (b[board[i][j]-48]==true) {
                        b[board[i][j]-48]=false;
                    }else{
                        return false;
                    }
                }
            }
        }
        for (int i=0;i<9;i++) {
            Arrays.fill(b, true);
            for (int j=0;j<9;j++){
                if (board[j][i]!='.'){
                    if (b[board[j][i]-48]==true) {
                        b[board[j][i]-48]=false;
                    }else{
                        return false;
                    }
                }
            }
        }
        for (int i=0;i<9;i++) {
            Arrays.fill(b, true);
            int x=i/3;int y=i%3;
            for (int j=0;j<9;j++){
                if (board[x*3+dir[j][0]][y*3+dir[j][1]]!='.'){
                    if (b[board[x*3+dir[j][0]][y*3+dir[j][1]]-48]==true) {
                        b[board[x*3+dir[j][0]][y*3+dir[j][1]]-48]=false;
                    }else{
                        return false;
                    }
                }
            }
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(new Solution36().isValidSudoku(new char[][]{{'8','3','.','.','7','.','.','.','.'},
                {'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},
                {'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},
                {'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},
                {'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}}));
    }
}
